import 'package:flutter/foundation.dart';
import 'package:get/get.dart';
import '../services/dio_service.dart';
import '../utils/encryption_util.dart';

/// 举报相关API接口
/// 
/// 提供举报创建、查询等相关的API调用方法
class ReportApi {
  static const String tag = 'ReportApi';
  
  // 📡 网络服务实例
  static DioService get _dioService => Get.find<DioService>();

  /// 创建举报（AES加密）
  /// 
  /// [reportType] 举报类型：'活动'、'用户'、'评论'等
  /// [reporterId] 举报者ID
  /// [contentId] 被举报内容ID
  /// [reportReason] 举报原因
  static Future<Map<String, dynamic>> createReport({
    required String reportType,
    required int reporterId,
    required int contentId,
    required String reportReason,
  }) async {
    try {
      debugPrint('$tag: =============== 创建举报（AES加密） ===============');
      debugPrint('$tag: 📝 举报类型: $reportType');
      debugPrint('$tag: 👤 举报者ID: $reporterId');
      debugPrint('$tag: 🎯 内容ID: $contentId');
      debugPrint('$tag: 📋 举报原因: $reportReason');
      
      // 构建请求数据
      final requestData = {
        'reportType': reportType,
        'reporterId': reporterId.toString(),
        'contentId': contentId,
        'reportReason': reportReason,
      };
      
      debugPrint('$tag: 📊 请求参数（加密前）: $requestData');
      
      // AES 加密
      final encryptedPayload = EncryptionUtil.createEncryptedPayload(requestData);
      debugPrint('$tag: 🔐 加密载荷已生成');
      
      // 发送POST请求到 /reports/create/
      final response = await _dioService.post(
        '/reports/create/',
        data: encryptedPayload,
      );
      
      // 获取响应数据
      final responseData = response.data as Map<String, dynamic>;
      
      if (responseData['status'] == 'success') {
        debugPrint('$tag: ✅ 举报创建成功');
        return {
          'status': 'success',
          'message': responseData['message'] ?? '举报提交成功',
        };
      } else {
        debugPrint('$tag: ❌ 举报创建失败: ${responseData['message']}');
        return {
          'status': 'error',
          'message': responseData['message'] ?? '举报失败',
        };
      }
    } catch (e) {
      debugPrint('$tag: ❌ 创建举报失败: $e');
      return {
        'status': 'error',
        'message': '举报提交失败: ${e.toString()}',
      };
    }
  }

  /// 获取举报信息列表（AES加密）
  /// 
  /// 参考小程序实现：查询用户提交的举报信息
  /// 接口：POST /reports/query_by_user/ （与微信小程序完全一致）
  /// 
  /// [reporterId] 举报者ID
  /// [page] 页码，默认1
  static Future<Map<String, dynamic>> getReportInfo({
    required String reporterId,
    int page = 1,
  }) async {
    try {
      debugPrint('$tag: =============== 获取举报信息列表（AES加密） ===============');
      debugPrint('$tag: 👤 举报者ID: $reporterId');
      debugPrint('$tag: 📄 页码: $page');
      
      // 🔥 构建请求数据（与微信小程序完全一致 - api.js第1545-1549行）
      final requestData = {
        'reporterId': reporterId.toString(),  // ✅ 字符串格式（驼峰命名）
        'page': page,                         // ✅ 数字格式
        // ⚠️ 注意：不发送pageSize参数（参考微信小程序实现）
      };
      
      debugPrint('$tag: 📊 请求参数（加密前）: $requestData');
      
      // AES 加密
      final encryptedPayload = EncryptionUtil.createEncryptedPayload(requestData);
      debugPrint('$tag: 🔐 加密载荷已生成');
      
      // 🔥 发送POST请求到 /reports/query_by_user/ （与微信小程序一致）
      final response = await _dioService.post(
        '/reports/query_by_user/',  // ✅ 修改接口地址
        data: encryptedPayload,
      );
      
      // 获取响应数据
      final responseData = response.data as Map<String, dynamic>;
      
      if (responseData['status'] == 'success') {
        debugPrint('$tag: ✅ 举报信息列表获取成功');
        
        // 🔥 提取data对象（响应结构：{status, data: {reports, pagination}}）
        final dataMap = responseData['data'] as Map<String, dynamic>?;
        
        // 提取举报列表
        final List<dynamic> reportsList = dataMap?['reports'] ?? [];
        debugPrint('$tag: 📋 举报信息数量: ${reportsList.length}');
        
        // 提取分页信息
        final paginationData = dataMap?['pagination'] as Map<String, dynamic>?;
        debugPrint('$tag: 📄 分页信息: $paginationData');
        
        return {
          'status': 'success',
          'message': responseData['message'] ?? '获取举报信息成功',
          'reports': reportsList,
          'pagination': paginationData,
        };
      } else {
        debugPrint('$tag: ❌ 获取举报信息失败: ${responseData['message']}');
        return {
          'status': 'error',
          'message': responseData['message'] ?? '获取举报信息失败',
          'reports': [],
        };
      }
    } catch (e) {
      debugPrint('$tag: ❌ 获取举报信息失败: $e');
      return {
        'status': 'error',
        'message': '获取举报信息失败: ${e.toString()}',
        'reports': [],
      };
    }
  }

  /// 删除举报（AES加密）
  /// 
  /// [reportId] 举报ID
  /// [reporterId] 举报者ID（用于权限验证）
  static Future<Map<String, dynamic>> deleteReport({
    required int reportId,
    required int reporterId,
  }) async {
    try {
      debugPrint('$tag: =============== 删除举报（AES加密） ===============');
      debugPrint('$tag: 🗑️ 举报ID: $reportId');
      debugPrint('$tag: 👤 举报者ID: $reporterId');
      
      // 构建请求数据
      final requestData = {
        'report_id': reportId,
        'reporter_id': reporterId.toString(),
      };
      
      debugPrint('$tag: 📊 请求参数（加密前）: $requestData');
      
      // AES 加密
      final encryptedPayload = EncryptionUtil.createEncryptedPayload(requestData);
      debugPrint('$tag: 🔐 加密载荷已生成');
      
      // 发送POST请求到 /reports/delete/
      final response = await _dioService.post(
        '/reports/delete/',
        data: encryptedPayload,
      );
      
      // 获取响应数据
      final responseData = response.data as Map<String, dynamic>;
      
      if (responseData['status'] == 'success') {
        debugPrint('$tag: ✅ 举报删除成功');
        return {
          'status': 'success',
          'message': responseData['message'] ?? '删除成功',
        };
      } else {
        debugPrint('$tag: ❌ 举报删除失败: ${responseData['message']}');
        return {
          'status': 'error',
          'message': responseData['message'] ?? '删除失败',
        };
      }
    } catch (e) {
      debugPrint('$tag: ❌ 删除举报失败: $e');
      return {
        'status': 'error',
        'message': '删除失败: ${e.toString()}',
      };
    }
  }
}

